package javaCode.chapter14.generic.improve;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author 徐州城
 * @version 1.0
 */
@SuppressWarnings("all")
public class Generic02 {
    public static void main(String[] args) {

        //使用传统的方式来解决 ==> 使用泛型
        //解读
        //1. 当我们 ArrayList<Dog> 表示存放到 ArrayList 集合中的元素是Dog类型 (细节后面说...)
        //2, 如果编译类型发现添加的类型，不满足要求，就会报错
        //3. 在遍历的时候，可以直接取出 Dog类型而不是 Object
        //4. public class ArrayList<E> {} E称为泛型，那么 Dog->E
        ArrayList<Dog> arrayList = new ArrayList<Dog>();
        arrayList.add(new Dog("小白",1));
        arrayList.add(new Dog("小灰",2));
        arrayList.add(new Dog("小红",1));

        //加入我们的程序员，不小心，添加了一只猫
        //arrayList.add(new Cat("小小",3));

        //遍历
        Iterator<Dog> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Dog dog = iterator.next();
            System.out.println(String.format("name:%s, age:%d", dog.getName(),dog.getAge()));
        }

        System.out.println("使用泛型");
        for (Dog dog : arrayList) {
            System.out.println(dog.getName() + " - " + dog.getAge());
        }

    }
}
/*
1. 请编写程序，在ArrayList 中，添加3个Dog对象
2. Dog对象含有name 和 age，并输出name 和 age(要求使用getXxx())
3. 使用泛型完成代码
 */
class Dog{
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class Cat{
    private String name;
    private int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}